package com.fengkai.filepost.pdfoutstream.test.ODsolutions;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

/**
 * @author Fengkai
 * @creat 2023/4/14
 * 给定一个字符串，只包含大写字母，求在包含同一字母的子串中，长度第 k 长的子串的长度，相同字母只取最长的那个子串。
 * 输入描述
 * 第一行有一个子串(1<长度<=100)，只包含大写字母。
 * 第二行为 k的值
 * 输出描述
 * 输出连续出现次数第k多的字母的次数。
 * 示例1   输入输出示例仅供调试，后台判题数据一般不包含示例
 * 输入
 * AAAAHHHBBCDHHHH
 * 3
 * 输出
 * 2
 */
public class LianXuZiMu {
    public static void main(String[] args) {
        System.out.println(LianXuZiMu("AAAAHHHBBCDHHHH", 3));
    }

    public static int LianXuZiMu(String s, int k) {
        int index = 0;
        HashMap<Character, Integer> characterIntegerHashMap = new HashMap<>();
        while (index < s.length()){
            int count = 0;
            char c = s.charAt(index);
            while (index < s.length() && c == s.charAt(index)){
                index++;
                count++;
            }
            if (index == s.length() && s.charAt(index - 1) != c){
                Integer orDefault = characterIntegerHashMap.getOrDefault(s.charAt(index - 1), 0);
                characterIntegerHashMap.put(s.charAt(index - 1), orDefault > 1 ? orDefault : 1);
            }else {
                Integer orDefault = characterIntegerHashMap.getOrDefault(c, 0);
                characterIntegerHashMap.put(c, orDefault > count ? orDefault : count);
            }
        }
        ArrayList<Integer> integers = new ArrayList<>();
        for (Character character : characterIntegerHashMap.keySet()) {
            integers.add(characterIntegerHashMap.get(character));
        }
        Collections.sort(integers, (v1, v2) -> v2.compareTo(v1));
        return integers.get(k - 1);
    }
}
